/**
 * @file GridStructs.h
 * @brief 网格相关数据结构定义
 * 
 * 定义了网格处理所需的基本数据结构，包括：
 * 1. 网格尺寸(GridSize)
 * 2. 网格属性(GridProperties)
 * 3. 计算结果(Result)
 * 
 * 这些结构体被用于在整个程序中传递和存储网格相关数据
 */
#pragma once
#include <vector>
#include "Point3D.h"

/**
 * @brief 网格尺寸结构
 * 
 * 存储网格在三个维度上的大小
 */
struct GridSize {
    int Nx;  ///< X方向网格数量
    int Ny;  ///< Y方向网格数量
    int Nz;  ///< Z方向网格数量
    
    /**
     * @brief 默认构造函数
     */
    GridSize();
};

/**
 * @brief 网格属性结构
 * 
 * 存储网格单元的物理属性
 */
struct GridProperties {
    std::vector<double> youngmod;   ///< 杨氏模量数据
    std::vector<double> poissonr;   ///< 泊松比数据
};

/**
 * @brief 结果结构
 * 
 * 存储插值计算的结果数据
 */
struct Result {
    int index;              ///< 结果索引
    Point3D point;          ///< 空间位置
    double young_value;     ///< 插值后的杨氏模量
    double poisson_value;   ///< 插值后的泊松比

    /**
     * @brief 比较运算符
     * @param other 另一个结果对象
     * @return 如果当前对象小于other则返回true
     */
    bool operator<(const Result& other) const;
};